| 라이브러리 | 기능 | URI 식별자 | 접두어 |
|---|---|---|---|
| 코어 | 일반 프로그램 언어에서 제공하는 변수선언, 조건/제어/반복문등의 기능을 제공한다. | http://java.sun.com/jsp/jstl/core | c |
| 포맷팅 | 숫자,날짜,시간을 포맷팅 하는 기능과 국제화, 다국어 지원 기능을 제공한다. | http://java.sun.com/jsp/jstl/fmt | fmt |
| 함수 | 문자열을 처리하는 함수를 제공한다. | http://java.sun.com/jsp/jstl/functions | fn |
| 데이터베이스 | 데이터베이스의 데이터를 입력/수정/삭제/조회하는 기능을 제공한다. | http://java.sun.com/jsp/jstl/sql | sql |
| XML처리 | XML 문서를 처리할 때 필요한 기능을 제공한다. | http://java.sun.com/jsp/jstl/xml | x |
pom.xml
...
<dependencies>
...
<!-- taglibs -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>datetime</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>string</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
.jsp
<!-- 선언부 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!-- 사용-->
<c:set var="hello" value="Hello" />
${hello}
<c:set/>
<!-- scope 속성은 선택적이며 page로 기본 설정되어 있다. -->
<c:set var="변수명" value="할당된 값"
scope="변수의 유효 범위 page|request|session|application" />
<!-- 간단 사용 예 -->
<c:set var="country" value="Korea" />
<c:set var="intArray" value="<%=new int[] {1,2,3,4,5} %>" />
<c:remove var="country" />
<c:out/> Syntax 및 예
<!-- Syntax -->
<c:out var="변수명" default="기본값" escapeXML="true|false" />
<!-- 간단 사용 예 -->
<p><c:out value="${country}" default="Korea" escapeXml="true"/></p>
<p>${country}</p>
<p>${intArray[0]}</p>
<c:if/> Syntax 및 예
<!-- Syntax -->
<c:if test="expression" var="name" scope="scope">
body content
</c:if>
<!-- 간단 사용 예 -->
<c:set var="login" value="true" />
<c:if test="${!login}"> <p><a href="/login.ok">로그인</a></p></c:if>
<c:if test="${login}"> <p><a href="/logout.ok">로그아웃</a></p></c:if>
<!-- 아래 예제와 같이 null 비교를 하지 않고 empty 비교를 하면 null과 ""를 동시에 체크할 수 있다. -->
<c:if test="${!empty country}"><p><b>${country}</b></p></c:if>
<c:choose/>
<!-- Syntax -->
<c:choose>
<c:when test="expression">
body content
</c:when>
...
<c:otherwise>
body content
</c:otherwise>
</c:choose>
<!-- 간단 사용 예 -->
<c:choose>
<c:when test="${login}">
<p><a href="/logout.ok">로그아웃</a></p>
</c:when>
<c:otherwise>
<p><a href="/login.ok">로그인</a></p>
</c:otherwise>
</c:choose>
<c:forEach/> Syntax 및 예
<!-- 정수 범위내의 반복 Syntax -->
<c:forEach var="name" varStatus="name"
begin="expression" end="expression" step="expression">
body content
</c:forEach>
<!-- 컬렉션 범위내의 반복 Syntax -->
<c:forEach var="name" items="expression" varStatus="name"
begin="expression" end="expression " step="expression">
body content
</c:forEach>
<!-- forEach 정수 범위내의 반복 -->
<c:forEach var="i" begin="0" end="10" step="2" varStatus="x">
<p> i = ${i}, i*i = ${i * i} <c:if test="${x.last}">, last = ${i}</c:if> </p>
</c:forEach>
<!-- forEach 컬렉션 범위내의 반복 -->
<%
java.util.List list = new java.util.ArrayList();
java.util.Map map = new java.util.HashMap();
map.put("color","red");
list.add(map);
map = new java.util.HashMap();
map.put("color","blue");
list.add(map);
map = new java.util.HashMap();
map.put("color","green");
list.add(map);
request.setAttribute("list", list);
%>
<c:forEach var="map" items="${list}" varStatus="x">
<p> map(${x.index}) = ${map.color} </p>
</c:forEach>
| 속성 | 메소드 | 설명 |
|---|---|---|
| current | getCurrent() | 현재 아이템 |
| index | getIndex() | 제로 기반(zero-based) 인덱스 값 |
| count | getCount() | 1 기반(one-based) 인덱스 값 |
| first | isFirst() | 첫 번째 값 여부 |
| last | isLast() | 마지막 값 여부 |
| begin | getBegin() | begin 속성의 값 |
| end | getEnd() | end 속성의 값 |
| step | getStep() | step 속성의 값 |
<c:forTokens/> Syntax 및 예
<!-- Syntax -->
<c:forTokens var="name" items="expression"
delims="expression" varStatus="name"
begin="expression" end="expression" step="expression">
body content
</c:forTokens>
<!-- 간단 사용 예 -->
<b>
<c:forTokens var="color" items="빨|주|노|초|파|남|보" delims="|" varStatus="i" >
<c:if test="${i.first}">color : </c:if>
${color}
<c:if test="${!i.last}">,</c:if>
</c:forTokens>
</b>
/webapps/el/CoreJSTL.jsp
<%@ page language="java" isELIgnored="false" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<!-- set, out -->
<c:set var="country" value="Korea" />
<c:set var="intArray" value="<%=new int[] {1,2,3,4,5}%>" />
<p><c:out value="${country}" default="Korea" escapeXml="true"/></p>
<p>${country}</p>
<p>${intArray[0]}</p>
<!-- if -->
<c:set var="login" value="true" />
<c:if test="${!login}">
<p><a href="/login.ok">로그인</a></p>
</c:if>
<c:if test="${login}">
<p><a href="/logout.ok">로그아웃</a></p>
</c:if>
<c:if test="${!empty country}"><p><b>${country}</b></p></c:if>
<!-- choose, when, otherwise -->
<c:choose>
<c:when test="${login}">
<p><a href="/logout.ok">로그아웃</a></p>
</c:when>
<c:otherwise>
<p><a href="/login.ok">로그인</a></p>
</c:otherwise>
</c:choose>
<!-- forEach 정수 범위내의 반복 -->
<c:forEach var="i" begin="0" end="10" step="2" varStatus="x">
<p> i = ${i}, i*i = ${i * i} <c:if test="${x.last}">, last = ${i}</c:if> </p>
</c:forEach>
<!-- forEach 컬렉션 범위내의 반복 -->
<%
java.util.List list = new java.util.ArrayList();
java.util.Map map = new java.util.HashMap();
map.put("color","red");
list.add(map);
map = new java.util.HashMap();
map.put("color","blue");
list.add(map);
map = new java.util.HashMap();
map.put("color","green");
list.add(map);
request.setAttribute("list", list);
%>
<c:forEach var="map" items="${list}" varStatus="x">
<p> map(${x.index}) = ${map.color} </p>
</c:forEach>
<!-- forTokens 예 -->
<b>
<c:forTokens var="color" items="빨|주|노|초|파|남|보" delims="|" varStatus="i" >
<c:if test="${i.first}">color : </c:if>
${color}
<c:if test="${!i.last}">,</c:if>
</c:forTokens>
</b>
<!-- remove -->
<c:remove var="country" />
<c:remove var="intArray" />
</body>
</html>
<fmt:formatNumber> Syntax 및 예
<!-- Syntax -->
<fmt:formatNumber value="numericValue"
[type="{number|currency|percent}"]
[pattern="customPattern"]
[var="varName"]
[scope="{page|request|session|application}"]/>
<!-- 간단 사용 예 -->
<fmt:setLocale value="ko_KR"/>
<p>number : <fmt:formatNumber value="1234567.89" type="number"/></p>
<p>currency : <fmt:formatNumber value="1234567.89" type="currency" currencySymbol="₩" /> </p>
<p>percent : <fmt:formatNumber type="percent">0.159</fmt:formatNumber></p>
<p>pattern=".000" :<fmt:formatNumber value="1234567.1" pattern=".000" /></p>
<p>pattern="#,#00.0#":<fmt:formatNumber value="1234567.891" pattern="#,#00.0#"/></p>
<fmt:parseNumber/> Syntax 및 예
<!-- Syntax -->
<fmt:parseNumber [type="{number|currency|percent}"]
[pattern="customPattern"]
[parseLocale="parseLocale"]
[integerOnly="{true|false}"]
[var="varName"]
[scope="{page|request|session|application}"]>
<!-- 간단 사용 예 -->
<p>number : <fmt:parseNumber value="1,234,567.89" type="number"/></p>
<p>currency : <fmt:parseNumber value="12345abcdef" integerOnly="false" type="number" /></p>
<fmt:formatDate/> Syntax 및 예
<!-- Syntax -->
<fmt:formatDate value="date"
[type="{time|date|both}"]
[dateStyle="{default|short|medium|long|full}"]
[timeStyle="{default|short|medium|long|full}"]
[pattern="customPattern"]
[timeZone="timeZone"]
[var="varName"]
[scope="{page|request|session|application}"]/>
<!-- 간단 사용 예 -->
<c:set var="now" value="<%= new java.util.Date() %>" />
<p> date full : <fmt:formatDate value="${now}" type="date" dateStyle="full" /></p>
<p> date short : <fmt:formatDate value="${now}" type="date" dateStyle="short" /></p>
<p> time : <fmt:formatDate value="${now}" type="time" /></p>
<p> both full : <fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full" /></p>
<p> pattern 1 : <fmt:formatDate value="${now}" pattern="yyyy-MM-dd aa hh:mm:ss" /></p>
<p> pattern 2 : <fmt:formatDate value="${now}" pattern="yyyy-MM-dd hh:mm:ss" /></p>
/webapps/el/FormatJSTL.jsp
<%@ page language="java" isELIgnored="false" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<body>
<!-- Set Locale -->
<fmt:setLocale value="ko_KR" />
<!-- formatNumber -->
<p>number : <fmt:formatNumber value="1234567.89" type="number"/></p>
<p>currency : <fmt:formatNumber value="1234567.89" type="currency" currencySymbol="₩" /> </p>
<p>percent : <fmt:formatNumber type="percent">0.159</fmt:formatNumber></p>
<p>pattern=".000" :<fmt:formatNumber value="1234567.1" pattern=".000" /></p>
<p>pattern="#,#00.0#":<fmt:formatNumber value="1234567.891" pattern="#,#00.0#"/></p>
<!-- parseNumber -->
<p>number : <fmt:parseNumber value="1,234,567.89" type="number"/></p>
<p>currency : <fmt:parseNumber value="12345abcdef" integerOnly="false" type="number" /></p>
<!-- formatDate -->
<c:set var="now" value="<%= new java.util.Date() %>" />
<p> date full : <fmt:formatDate value="${now}" type="date" dateStyle="full" /></p>
<p> date short : <fmt:formatDate value="${now}" type="date" dateStyle="short" /></p>
<p> time : <fmt:formatDate value="${now}" type="time" /></p>
<p> both full : <fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full" /></p>
<p> pattern 1 : <fmt:formatDate value="${now}" pattern="yyyy-MM-dd aa hh:mm:ss" /></p>
<p> pattern 2 : <fmt:formatDate value="${now}" pattern="yyyy-MM-dd hh:mm:ss" /></p>
</body>
</html>
| 속성 | 설명 |
|---|---|
| fn:contains(string, sbustring) | string이 substring을 포함하면 return True |
| fn:containsIgnoreCase(string, sbustring) | 대소문자 관계없이 string이 substring을 포함하면 return True |
| fn:endsWith(string, suffix) | string이 suffix로 끝나면 return True |
| fn:escapeXml(string) | stting에 XML과 HTML에서 특수문자(<,>,&,',")들이 있으면, XML엔티티 코드로 바꿔준뒤 문자열 반환 |
| fn:indexOf(string, sbustring) | string에서 substring이 처음으로 나타나는 인덱스 반환 |
| fn:join(array, separator) | array요소들을 separator를 구분자로 하여 연결해서 반환 |
| fn:length(item) | item이 배열이나 컬렉션이면 요소의 객수를 문자열이면 문자의 객수를 반환 |
| fn:replace(string, before, after) | string내에 있는 before 문자열을 after 문자열로 모두 변경해서 반환 |
| fn:split(string, separator) | string내의 문자열 separetor에 따라 나누어서 배열로 구성해서 반환 |
| fn:startsWith(string, prefix) | string이 prefix로 시작하면 return True |
| fn:substring(string, begin, end) | string에서 begin인덱스에서 시작해서 end인덱스에 끝나는 부분의 문자열 반환 |
| fn:substringAfter(string, sbustring) | string에서 substring이 나타나는 이후의 문자열 반환 |
| fn:substringBefore(string, sbustring) | string에서 substring이 나타나는 이전의 문자열 반환 |
| fn:toLowerCase(string) | string을 모두 소문자로 바꿔 리턴 |
| fn:toUpperCase(string) | string을 모두 대문자로 바꿔 리턴 |
| fn:trim(string) | string앞뒤의 공백을 모두 제거하여 반환 |
/webapps/el/FunctionJSTL.jsp
<%@ page language="java" isELIgnored="false" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<html>
<body>
<c:set var="name" value=" Oracle dbms 오라클클럽 "/>
<p>name: ${fn:replace(name, ' ', '*')}</p>
<c:set var="name" value="${fn:trim(name)}"/>
<p>trim name: ${fn:replace(name, ' ', '*')}</p>
<p>length(name): ${fn:length(name)}</p>
<p>toUpperCase(name): ${fn:toUpperCase(name)}</p>
<p>toLowerCase(name): ${fn:toLowerCase(name)}</p>
<p>substring(name,3,6): ${fn:substring(name,3,6)}</p>
<p>substringBefore(name,'dbms'): ${fn:substringBefore(name, 'dbms')}</p>
<p>substringAfter(name,'dbms'): ${fn:substringAfter(name, 'dbms')}</p>
<p>replace(name, '오라클클럽', 'OracleClub'): ${fn:replace(name, '오라클클럽', 'OracleClub')}</p>
<p>indexOf(name, 'dbms'): ${fn:indexOf(name,'dbms')}</p>
<p>contains(name, 'Oracle'): ${fn:contains(name, 'Oracle')}</p>
<p>containsIgnoreCase(name, 'opracle'): ${fn:containsIgnoreCase(name, 'oracle')}</p>
<p>startsWith(name, 'Oracle'): ${fn:startsWith(name, 'Oracle')}</p>
<p>startsWith(name, 'dbms'): ${fn:startsWith(name, 'dbms')}</p>
<p>endsWith(name, '오라클클럽'): ${fn:endsWith(name, '오라클클럽')}</p>
<c:remove var="name"/>
<c:set var="dbname" value="ORACLE, DB2, MSSQL, MYSQL, SYSBASE"/>
<c:set var="db_arr" value="${fn:split(dbname,',')}"/>
<c:forEach var="db" items="${db_arr}">
${db}<br/>
</c:forEach>
<p>join : ${fn:join(db_arr, ',')}</p>
</body>
</html>
xxx.jsp
<fmt:setLocale value="ko"/>
web.xml
* web.xml에 설정하면 일일이 .jsp에 설정하지 않아도 된다.
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
<param-value>ko</param-value>
</context-param>